查看原文
其他

深入对比 Uni V3,CurveV2,DODO 做市算法 —— 集中流动性带来的效率提升

DODO Research 2023-03-12

The following article is from SevenUpDAO开发者公会 Author DODO Research


作者 | DODO Research

Twitter |  @DodoResearch


DEX 发展中,算法的迭代和做市形式的变化是一个主线。从恒定价格和恒定乘积做市到各种集中流动性算法,DEX 的底层做市算法效率越来越高。大浪淘沙下,采用集中流动性方案的 DEX 表现位居市场前列,Uni V3,Curve V2,DODO 是其中的佼佼者。三者分别采用了不同的方式实现了流动性的集中,提高了 LP 的资金效率,并在市场上取得了巨大成功。本文将从多个维度剖析底层做市算法,深入比较三家交易所底层算法的数据表现,对比三家交易所的整体市场表现。


集中流动性

有效率,才有经济。                           —— 本杰明

恒定乘积做市公式:x*y=k,被视为 DeFi 领域的突破性创新。它开创了资金池模式的交易形式实现了链上交易,但恒定乘积的 AMM 做市曲线也有无法避免的效率问题。

Uniswap(Uni) 早期版本采用了恒定乘积做市公式。从图中可以看出,其流动性均匀地分布在曲线上,代币价格的理论波动范围在 0 到无穷,而市场上代币价格变动范围集中在一个小的区间内。因此,价格波动外的流动性并没有真正提供到市场上,这就造成了效率损失。这种情况下,滑点、市场深度、无常损失都会受到负面影响。


集中流动性就是以某种方式改变做市曲线上的流动性分布,将流动性集中在市场交易最频繁的区间,提高做市资金的效率。广义上讲,任何调控做市曲线,以改变资金池流动性分布的尝试都可以称之为集中流动性。Uni V3,Curve V2,DODO 都是典型的集中流动性的 DEX,但底层算法的明显差异也使各自有了不同的差异点。集中流动性的解决方案不单一,本质都是在尽可能改进资金利用效率,满足代币交易的市场需求和做市需求。



Uni V3,Curve V2,DODO —— 三种集中流动性的做市曲线

Uni V3

范围挂单和杠杆流动性

Uni V3 提出的范围挂单(Range Order)允许用户在特定的价格区间提供流动性,即把做市资金集中在特定的价格区间,而整个池子的流动性分布就是所有曲线的加和。LP 提供的是杠杆化的流动性,因为 LP 的资金只在其选定的价格区间起作用。若在区间内,做市资金赚取手续费的效率成倍提升;若在区间外,做市资金便失效。


由此可见,**Uni V3 集中流动性的方式是提供了杠杆流动性的机制,通过 LP 的主观行为将流动性集中在市场价格附近,**即 LP 会主观预测价格运行的范围。市场价格波动时,LP 将会主动调整自己的做市范围,大量的调整行为会导致整体流动性分布的改变,从统计上看最终将会集中在市场价格附近。整体效率得到了提升,但用户之间的效率改变则取决于用户具体的挂单行为。


设计分析和优劣势

Uni V3 的设计目的是提高 LP 资金效率,LP 可以根据自己的判断提供流动性的范围可自由选择,进行定制化做市。这一设计虽然在整体上提高了 LP 的做市效率,但是 LP 们的收益不均衡,且增加额外的决策成本。LP 做市的主动性更强,但这一定程度上与 DEX 惰性做市的初衷相悖。大部分散户并没有预测市场的能力,反而会因为杠杆流动性面临更高的无常损失的风险。这一设计也催生出了 JIT(Just In Time)攻击的现象,做市操作变得更加复杂。

优势

  • 灵活度高,可以自定义做市的价格区间,自己控制资金效率。

  • 市场流动性分布是所有 LP 的范围挂单形成的,是主观形成的,更贴近于市场行为。

  • 资金效率的上限高。

劣势

  • LP 收益依赖于 LP 对市场的判断能力,增加了 LP 的决策成本,导致 LP 收益不均衡,并且存在 JIT 攻击的情况。

  • 提升效率的同时提升了风险,高杠杆流动性将面临更高的无常损失。

Curve V2

自动调整价格曲线

Curve V2 是 Curve 针对非稳定资产设计的,核心思想跟 Curve 的 StableSwap 没有区别,让我们回顾一下 Curve 提出的 StableSwap。

Curve 第一代算法非常简洁,是恒定乘积和恒定价格两种做市曲线的加权求和。**这使得曲线在固定价格附近的曲率变小,在固定价格上实现流动性的集中。**稳定币的交易中,价格集中在 1 附近,Curve 通过这种方式实现了在 1 附近的流动性集中,从而提升了资金效率。


Curve V2 针对非稳定资产,也是用恒定乘积和恒定价格两种做市曲线进行加权求和得出新的做市曲线,只不过这个曲线会动态调整。上一代算法只能在固定价格附近集中流动性,**而这一代算法会根据内部预言机动态调整这个价格以及集中流动性的程度。**Curve V2 定义了 K 值,这是一个动态调整的参数,这个参数决定了曲线的形状。K 值越大,曲率越小,曲线越接近于恒定价格曲线,流动性越集中。



Curve V2 会根据内部预言机来计算 D 值,该参数将决定锚定价格,也即流动性集中的价格。Curve V2 的算法是通过混合恒定乘积和恒定价格曲线来集中流动性,不断更新两个曲线的权重,内部预言机来决定流动性集中的锚定价格,通过不断更新这个价格,来实现流动性集中在盘口价格附近。



设计分析和优劣势


Curve V2 的设计是比较简洁的,通过混合恒定乘积和恒定价格曲线来集中流动性,内部预言机决定锚定价格。在 Curve V2 的这种设计模式下,内部预言机价格的改变是通过用户的交易行为来实现的,当大量的交易行为使得价格发生较大程度偏离时,内部预言机更新价格,流动性分布发生改变。


优势


  • 通过独创的做市曲线降低交易价格附近的滑点,保证市场深度,且做市函数适用于各种代币。


  • 内部预言机动态调整锚定价格,以确保在市场价格附近交易。


  • 动态调整交易手续费,离价格平衡点越远,手续费越高,从而在市场价格附近提供更优的价格。

劣势


  • 内部预言机价格调整依赖于用户交易行为,具有一定的滞后性,无法提前调整流动性分布。


  • 曲线求解无显式形式,需用数值方法求解(牛顿法),计算开销较大,且有一定的误差。


DODO


做市商报价调整曲线


DODO 通过独创的 PMM 算法提供流动性,PMM 算法引入了参考价格,做市商通过自主报价,将流动性集中在市场价格附近。与基于 AMM 的做市算法不同,PMM 算法的价格计算基于外部价格和库存两个因素。当外部价格发生变化时,代币的兑换比例会直接发生变化,用户与池子交易的时候,库存发生变化,价格也会发生变化。因此,PMM 算法决定的代币价格取决于外部价格和用户交易行为,使得 DODO 可以提前调整流动性分布,始终将流动性保持在外部价格附近。




PMM 算法的具体形式如下,其中,参数 i 是外部价格,由做市商报价提供,k 是控制流动性集中程度的参数,k 越小,流动性越集中,B、Q 是代币的库存,该公式描述的是边际价格随着库存变动和外部价格变动的关系。



DODO 提供了灵活的建池方案,参数可以由用户自行设置,非常灵活。


设计分析和优劣势


从设计上来看,DODO 实际上参考了 CEX 的流动性分布。外部价格由做市商报价提供,预言机提供的外部价格实际上就是用户在 CEX 交易形成的市场价格。目前 CEX 的流动性依旧主导市场,根据外部价格调整流动性极大提升了做市效率。


优势

  • 通过独创的 PMM 算法做市,引入外部价格,流动性锚定在市场价附近,提供低滑点的交易价格。


  • 资金效率高,在同等资金下可以支持更大的交易量。


  • 流动性分布调整速度快,使得 DODO 的流动性可以快速地跟市场同步。

劣势


  • 依赖于外部价格,有做市商报价偏离的风险,且外部价格代表了市场上的高流动性,并非是 DODO 内部的流动性。


  • 锚定池中 k 值是设定值,没有动态调整机制。


做市曲线对比——以 ETH 交易池为例

数据处理

对不同 DEX 的交易池进行对比,由于做市算法各不相同,有很大的难度,比如数据源问题,比较分析问题以及如何确定一个比较的标准。

基于此,本文数据分析进行如下处理:

  • 选取 Uni V3 以太坊主网的 USDC/WETH 0.05% 池子,Curve 以太坊主网的 USDT/WBTC/WETH 3crypto 池子,DODO Polygon 上的  USDC/WETH 做市商池子作为样本,这三个样本池均为 WETH 对稳定币的交易对。直接查询智能合约数据,得到底层参数,根据各交易所的做市曲线计算出流动性分布。

  • 流动性数据范围从 2022 年 1 月 1 日,到 2022 年 8 月 16 日,数据间隔为一小时。

  • 交易量和 TVL 数据范围从 2022 年 6 月 16 日,到 2022 年 8 月 16 日。

  • 所有数据采样均同步时间戳,同步区块高度。

  • 所有数据可视化部分,为视觉效果的统一,均进行归一化处理。

  • 出于计算处理的需要,总流动性分布采用 ETH 价格在 100 到 10000 区间内的流动性。

  • 在选定时间跨度内的流动性分布变化,2% 代表的是在市场价格正负 2% 的价格区间内的流动性占总流动性的比例,6%,10% 同理。

流动性分布数据表现 —— 流动性真的集中了吗?

Uni V3

对于 Uni V3 的 USDC/WETH 0.05% 池子来说,流动性整体集中的程度较高,波动较大,且在不同的市场环境下有所不同,在某些情况下,市场价格和拥有最高流动性的价格之间会发生较大偏离。

流动性分布均值

Uni V3 USDC/WETH 0.05% Pool 流动性分布随时间变化(数据来源:Ethereum)


从图中可以看出,UniV3 的 0.05% WETH/USDC  池子的流动性在大部分时间的流动性集中度较高,10% 以内的流动性平均占总流动性的比例高达 40%,基本上实现了集中流动性。总体来看,在相当长的时间跨度内,Uni V3 的 WETH 0.05% 池子的流动性集中程度保持了较高的水平,实现了 V3 的设计目的。


Uni V3 USDC/WETH 0.05% Pool流动性分布比例变化情况(数据来源:Ethereum)


数据显示,在市场波动较大时,该池子的流动性分布会发生较大变化,市场价格附近的流动性集中程度迅速降低。例如,5 月 6 号到 5 月 13 号,6 月 10 号到 6 月 19  号,伴随着 ETH 价格的剧烈下降,该池子的流动性分布迅速调整,大量的用户行为导致市场价格附近的流动性集中程度大幅下降,用户纷纷把做市范围调整到市场价格以外,10% 以内的流动性降低到 10% 以下。因此,在市场价格剧烈波动时,由于 Uni V3 的机制设计,用户会预判市场,提前撤走流动性,使得流动性集中程度下降。


Uni V3 USDC/WETH 0.05% Pool市场价格与最高流动性价格偏离情况(数据来源:Ethereum)


上图是流动性最高的 tick 价格与市场价格的对比情况,观察流动性最高的 tick 范围与市场交易价格范围的偏离程度,可以看出,Uni V3 在大多数时候,流动性最高的 tick 价格与市场交易价格是较为贴合的,但在某些时候会发生较大的偏离。


Curve V2


Curve V2 的 USDT/WBTC/WETH 池子,即 3crypto 池子的流动性分布集中程度较高,波动性较低。市场价格和拥有最高流动性的价格之间在大部分时间会有一定的偏离,但最大不超过 1%。用户交易行为本身会导致内部预言机价格调整,而动态模拟 Curve V2 的变化较为复杂,且链下计算环境和链上计算环境存在差异,因此本文并没有考虑 Curve V2 的动态变化,低价格范围的流动性分布更具参考性。


流动性分布均值

  Curve 3crypto Pool 流动性分布随时间变化(数据来源:Ethereum)


从图中可以看出,Curve V2 的 USDT/WBTC/WETH 池子的流动性分布的波动较小,且呈现价格范围越大波动越高的特征,流动性集中在市场价格附近的程度较高。Curve V2 的特殊的波动性特征是由其算法决定的,由于 Curve 的曲线会动态调整,更大的价格范围受到的影响越大。与 DODO 的算法类似,由于预言机价格会发生调整,当用户交易行为使得价格偏离时,Curve V2 的内部预言机本身就发生了调整,所以 6%,10% 价格范围的流动性并不代表在实际交易中的市场深度。


Curve 3crypto Pool 市场价格与最高流动性价格偏离情况(数据来源:Ethereum)


可以看出,Curve 的内部预言机价格与市场价格还是存在一定的偏离的,虽然偏离程度较小,但是大多数情况下都会有些许偏离,这说明了 Curve 内部预言机的价格调整存在一定的时滞。这是算法本身的特性带来的,由于 Curve 会在用户交易使得价格偏离某个临界值时更新预言机价格,因此会存在一定的时滞,不过 Curve 的价格偏离程度较小。


DODO


DODO 的 USDC/WETH 池子的流动性分布集中程度最高,这是因为 DODO 做市商一般将 K 值设定的非常小,并且高频率更新参考价格,从而将流动性集中。由于 DODO 做市商报价频率较高,市场价格和拥有最高流动性的价格之间保持高度锚定。


流动性分布均值


DODO USDC/WETH Pool 流动性分布随时间变化(数据来源:Polygon)


从图中可以看出,DODO 的 USDC/WETH 池子的流动性分布的波动较大,流动性集中在市场价格附近的程度非常高。从数据上来看,总体来看,DODO 的做市商最低会将 K 值设定到 0.01,从而实现流动性的高度集中。不过做市商在市场行情极端波动时会迅速调整 K 值,调整流动性分布,由于 PMM 算法给做市商提供了非常灵活的调整空间,因此流动性分布的调整非常灵活,总体上来说流动性集中程度比较高。



DODO USDC/WETH Pool 市场价格与最高流动性价格偏离情况(数据来源:Polygon)


由于 DODO 的 PMM 算法通过做市商做市,提供报价,引入外部价格,从而使该池子的市场价格和拥有最高流动性的价格之间保持高度锚定。**同时,对于 PMM 算法来说,拥有最高流动性的价格即为做市商提供的外部价格,因此,上图也说明了外部价格和市场价格相差不大,这说明并不会出现用户大规模交易使得市场价格大幅偏离做市商报价的情况,也即 DODO 的做市商价格调整能及时跟上市场变化。


交易数据表现 —— 资本效率差异几何?


本文获取了三个样本池的交易量和 TVL 数据,采用 Volume/TVL 作为资本效率的代理指标,该指标衡量了每单位 TVL 能带来的交易量是多少,反映了资金的做市效率。


由于三个样本池之间的交易量和 TVL 绝对值相差较大,我们直接比较资本效率。


样本池资本效率对比(数据来源:Ethereum,Polygon)


从样本池的表现来看,DODO USDC/WETH 的资本效率高于 Uniswap USDC/WETH 池子的资本效率,高于 Curve 3crypto 池子的资本效率,这跟对应的流动性分布表现是一致的。DODO 的做市商池子有专业做市商提供报价,资本效率很高;Uniswap 的 USDC/WETH 池子是其交易量前几名的池子,流动性充足。对于 ETH 这种流动性较高的资产,Uni V3 的设计结构也能很好地集中流动性,提升资本效率。DODO 的算法对于价值稳定的资产有更好的效果,比如稳定币交易对。


市场表现分析

上文通过选择 WETH 与稳定币交易对的样本池对不同的算法设计进行了对比分析,接下来我们对 Uniswap,Curve 和 DODO 的整体的市场表现进行对比。

交易量对比


 各交易所交易量变化对比(数据来源:Coingecko)


从交易量来看,Uni V3 的交易量绝对规模超过 Curve 和 DODO。DODO 增速度快,7 月中旬之后,其交易量持续领先 Curve。由于稳定币行情的波动,Curve 在 5、6 月份的交易量跳涨。


TVL 对比


各交易所 TVL 变化对比(数据来源:Defillamma)


Curve 的总锁定价值很高,但在稳定币行情出现波动后,急速下降,不足峰值一半。Uni 的 TVL 总量较大,波动性不高,并且在较差的市场行情下保持了稳定。相对而言,DODO 的 TVL 较低,且稳定币占很高的比例。


资本效率对比


各交易所资本效率变化对比(数据来源:Coingecko,Defillamma)


从图中可以看出,整体资本效率最高的是 DODO,其次是 Uniswap,最低的是 Curve。DODO 领先的资本效率主要是因为其稳定币交易对和专业做市商做市。DODO 稳定币交易对的交易量占比很高,且 PMM 算法为稳定币交易对设置 k 值为 0.01,稳定币交易对在市场价格附近的流动性集中程度很高,从而有更好的资本效率。Uniswap Lab 的团队在 Dunecon 中也提到了 DODO 在稳定币交易上的优势。


7UPDAO

声明:请读者严格遵守所在地法律法规,本文不代表任何投资建议。


原文链接:

https://dodotopia.notion.site/Uni-V3-CurveV2-DODO-4bb203cb20654a058482e59ce2fddb62

7up DAO

开发公会

7upDAO开发者公会,致力于Web3.0产品开发和技术探索。


微信群:加微信seven7upDAO入群

Twitter:@7upDAOdeveloper

Discord:https://discord.gg/7updao

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存